/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package is202.hrms.web;

import is202.hrms.ejb.StudentEJB;
import is202.hrms.ejb.ModulEJB;
import is202.hrms.entity.Student;
import is202.hrms.entity.Modul;
import is202.hrms.web.View;
import java.io.Serializable;
import javax.ejb.EJB;
import javax.ejb.EJBException;
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;

/**
 * Dette er en backingbean for modul.xhtml.
 * @Named forteller oss at det er en CDI-backingbean
 * @ConversationScoped kontrollerer levetiden til beanen.
 * Levetiden blir håndtert i koden
 */
@Named("modulbean")
@ConversationScoped
public class ModulBean implements Serializable {

    /**
     * @Inject sender en forespørsel til serveren om å gi oss
     * et Conversation-objekt for så å lagre det i "conv"
     */
    private static final long serialVersionUID = 1L;
    @EJB private ModulEJB modEjb;
    @EJB private StudentEJB studEjb;
    @Inject private Conversation conv;

    private boolean updating;

    // Disse egenskapene blir kopiert til Modul-objektet og blir lagret i databasen
    private long modId;
    private String navn;
    private Student stud;

    public ModulBean() {
    }

    /**
     * Gir en modul en id med nummer
     */
    public void setModId(long modId) {
        if (conv.isTransient()) {
            conv.begin();
        }

        Modul modul = modEjb.find(modId);
        if (null == modul) {
            // Kommer hit hvis modId ikke er gyldig eller hvis modId er gyldig men
            // den ikke har en modul med gitt modId
            updating = false;
            this.modId = 0;
            this.navn = null;
            this.stud = studEjb.getDefaultStudent();
        
        }
        else {
            this.modId = modul.getId();
            this.navn = modul.getNavn();
            this.stud = modul.getStudent();
            updating = true;
        }
    }

    public long getModId() {
        return modId;
    }

    public String getNavn() {
        return navn;
    }

    public void setNavn(String navn) {
        this.navn = navn;
    }

    public Student getStudent() {
        return stud;
    }

    public void setStudent(Student stud) {
        this.stud = stud;
    }

    public boolean isUpdating() {
        return updating;
    }

    private Modul createModulObject() {
        // Lager et modul-objekt som inneholder data fra et form.
        // Objektet kan deretter bli sendt videre til ModulListBean
        Modul modul = new Modul();
        modul.setId(modId);
        modul.setNavn(navn);
        modul.setStudent(stud);
        return modul;
    }

    public View saveModul() {
        Modul modul = createModulObject();
        if (updating) modEjb.update(modul);
        else modEjb.insert(modul);
        conv.end();
        return View.moduler;
    }

    public View deleteModul() {
        Modul modul = createModulObject();
        modEjb.delete(modul);
        return View.moduler;
    }

    public View cancel() {
        conv.end();
        return View.moduler;
    }
}
